﻿using UnityEngine;
using QFramework;
using System.Collections.Generic;
using HKTools;

/// <summary>
/// 简单版任务系统 演示测试脚本
/// </summary>
public class Test_UseSimpleTask : MonoBehaviour, IController
{
    public IArchitecture GetArchitecture()
    {
        return HK_ArchitectureProvider.Architecture;
    }

    void Start()
    {
        // 注册 任务队列开始 事件
        this.RegisterEvent<Event_STS_TaskQueueStart>(args =>
        {
            HKDebug.Log($"任务队列 开始：{args._taskQueueType}", LogColor.Blue);
        }).UnRegisterWhenGameObjectDestroyed(gameObject);

        // 注册 任务队列结束 事件
        this.RegisterEvent<Event_STS_TaskQueueFinish>(args =>
        {
            HKDebug.Log($"任务队列 结束：{args._taskQueueType}", LogColor.Blue);
        }).UnRegisterWhenGameObjectDestroyed(gameObject);

        // 注册 任务队列中断 事件
        this.RegisterEvent<Event_STS_TaskQueueBreakUp>(args =>
        {
            HKDebug.Log($"任务队列 中断：{args._taskQueueType}", LogColor.Yellow);
        }).UnRegisterWhenGameObjectDestroyed(gameObject);

        // 注册 任务开始 事件
        this.RegisterEvent<Event_STS_TaskStart>(args =>
        {
            HKDebug.Log($"任务 开始：{args._taskQueueType} : {args._taskName}", LogColor.Green);
        }).UnRegisterWhenGameObjectDestroyed(gameObject);

        // 注册 任务完成 事件
        this.RegisterEvent<Event_STS_TaskFinish>(args =>
        {
            HKDebug.Log($"任务 结束：{args._taskQueueType} : {args._taskName}", LogColor.Green);
        }).UnRegisterWhenGameObjectDestroyed(gameObject);
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.F1))
        {
            Queue<TaskQueue01> taskQueue = new Queue<TaskQueue01>(new TaskQueue01[]
            {
                TaskQueue01.Step01_放置干扰天线支架,
                TaskQueue01.Step02_安装干扰天线,
                TaskQueue01.Step03_连接干扰天线与干扰源,
                TaskQueue01.Step04_放置抗干扰天线支架,
                TaskQueue01.Step05_安装抗干扰天线,
                TaskQueue01.Step06_连接抗干扰天线与电脑,
                TaskQueue01.Step07_将干扰天线对准抗干扰天线,
                TaskQueue01.Step08_放置标定天线,
            });

            // 初始化并开始 任务队列1 
            this.SendCommand(new CMD_STS_InitTaskQueue<TaskQueue01>(STS_TaskQueueType.Queue1, taskQueue));
        }

        if (Input.GetKeyDown(KeyCode.F2))
        {
            Queue<TaskQueue02> taskQueue = new Queue<TaskQueue02>(new TaskQueue02[]
            {
                TaskQueue02.Step01_开启设备电源,
                TaskQueue02.Step02_初始化设备参数,
                TaskQueue02.Step03_运行设备自检,
                TaskQueue02.Step04_开始数据采集,
                TaskQueue02.Step05_保存采集结果,
            });

            // 初始化并开始 任务队列2
            this.SendCommand(new CMD_STS_InitTaskQueue<TaskQueue02>(STS_TaskQueueType.Queue2, taskQueue));
        }

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            // 中断 任务队列1
            this.SendCommand(new CMD_STS_BreakUpTaskQueue(STS_TaskQueueType.Queue1));
        }

        if (Input.GetKeyDown(KeyCode.Q))
        {
            // 查询 任务队列1的所有任务名
            List<string> allTaskNames = this.SendQuery(new Query_STS_AllTaskNames(STS_TaskQueueType.Queue1));
            allTaskNames.ForEach(taskName => HKDebug.Log(taskName));
        }

        if (Input.GetKeyDown(KeyCode.W))
        {
            // 查询 任务队列1的进度
            float progress = this.SendQuery(new Query_STS_TaskQueueProgress(STS_TaskQueueType.Queue1));
            HKDebug.Log($"任务队列1的进度为：{progress}");
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            // 按顺序完成 任务队列1 当前任务，延时1秒开始下个任务
            this.SendCommand(new CMD_STS_CompleteCurrentTask(STS_TaskQueueType.Queue1, 1f));
        }

        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            // 完成步骤1，延时1.5秒开始下个任务
            this.SendCommand(new CMD_STS_CompleteAppointTask(STS_TaskQueueType.Queue1, TaskQueue01.Step01_放置干扰天线支架, 1.5f));
        }

        if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            // 完成步骤2，延时0.5秒开始下个任务
            this.SendCommand(new CMD_STS_CompleteAppointTask(STS_TaskQueueType.Queue1, TaskQueue01.Step02_安装干扰天线, 0.5f));
        }

        if (Input.GetKeyDown(KeyCode.Alpha3))
        {
            // 完成步骤3，延时0.5秒开始下个任务
            this.SendCommand(new CMD_STS_CompleteAppointTask(STS_TaskQueueType.Queue1, TaskQueue01.Step03_连接干扰天线与干扰源, 0.5f));
        }

        if (Input.GetKeyDown(KeyCode.Alpha4))
        {
            // 完成步骤4，延时0.5秒开始下个任务
            this.SendCommand(new CMD_STS_CompleteAppointTask(STS_TaskQueueType.Queue1, TaskQueue01.Step04_放置抗干扰天线支架, 0.5f));
        }

        if (Input.GetKeyDown(KeyCode.Alpha5))
        {
            // 完成步骤5，延时0.5秒开始下个任务
            this.SendCommand(new CMD_STS_CompleteAppointTask(STS_TaskQueueType.Queue1, TaskQueue01.Step05_安装抗干扰天线, 0.5f));
        }

        if (Input.GetKeyDown(KeyCode.Alpha6))
        {
            // 完成步骤6，延时0.5秒开始下个任务
            this.SendCommand(new CMD_STS_CompleteAppointTask(STS_TaskQueueType.Queue1, TaskQueue01.Step06_连接抗干扰天线与电脑, 0.5f));
        }

        if (Input.GetKeyDown(KeyCode.Alpha7))
        {
            // 完成步骤7，延时0.5秒开始下个任务
            this.SendCommand(new CMD_STS_CompleteAppointTask(STS_TaskQueueType.Queue1, TaskQueue01.Step07_将干扰天线对准抗干扰天线, 0.5f));
        }

        if (Input.GetKeyDown(KeyCode.Alpha8))
        {
            // 完成步骤8，延时0.5秒开始下个任务
            this.SendCommand(new CMD_STS_CompleteAppointTask(STS_TaskQueueType.Queue1, TaskQueue01.Step08_放置标定天线, 0.5f));
        }
    }
}
